unp代码相关修正
unp代码相关修正
1
tcpservpoll01.c:13: error: ‘OPEN_MAX’ undeclared (first use in this function)
OPEN_MAX 在 /usr/inlude/limits.h 已经不存在了
猜测:
/usr/include/linux/fd.h
和 /usr/include/linux/limit.h
里的 NR_OPEN 就是作者所说的 OPEN_MAX
Solution 1: OPEN_MAX --> NR_OPEN, 连 #include 这句都不用更改
Solution 2: 在 unp.h 里面手动添加 #define OPEN_MAX 1024, 这个 1024 从上面所说 NR_OPEN 的值得到,
2
tcpservpoll01.c:28: error: ‘POLLRDNORM’ undeclared
原因:
usr/include/sys/poll.h
里使用了feature.h
,必须在任何使用 feature.h 的文件之前有 #define __XOPEN_SOURCE 的语句
usr/include/sys/poll.h 缺少如下语句:
#ifdef __USE_XOPEN
/* These values are defined in XPG4.2. */
# define POLLRDNORM 0x040 /* Normal data may be read. */
# define POLLRDBAND 0x080 /* Priority data may be read. */
# define POLLWRNORM 0x100 /* Writing now will not block. */
# define POLLWRBAND 0x200 /* Priority data may be written. */
#endif
据闻:64位的相关文件里面是有定义的,而32位的Linux里面没有此相关定义。
我的poll.h里是有相关定义的,但是引用编译时仍然会报错。
Solution :在 unp.h 里面自己定义这些东西,否则,就是编译内核的时候添加 _XOPEN_SOURCE 选项了
我的解决办法:将.c
文件改成.cc
文件,使用g++编译成功